]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
popupMenu: Add a simple way to get the toplevel for a submenu / section
authorJasper St. Pierre <jstpierre@mecheye.net>
Mon, 8 Jul 2013 19:19:34 +0000 (15:19 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Mon, 15 Jul 2013 16:01:07 +0000 (12:01 -0400)
This will be used to avoid some nasty signal propagation when wanting to
rework how sections / submenus work.

https://bugzilla.gnome.org/show_bug.cgi?id=702539

js/ui/popupMenu.js

index 4b9eb400817d69993b8e1ef6b5c8bd7f4b5cbde3..b0d219f5a9d78807aa1df12353ae61fbd9d9a10e 100644 (file)
@@ -672,6 +672,7 @@ const PopupMenuBase = new Lang.Class({
 
     _init: function(sourceActor, styleClass) {
         this.sourceActor = sourceActor;
+        this._parent = null;
 
         if (styleClass !== undefined) {
             this.box = new St.BoxLayout({ style_class: styleClass,
@@ -694,6 +695,13 @@ const PopupMenuBase = new Lang.Class({
         this._sessionUpdatedId = Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
     },
 
+    _getTopMenu: function() {
+        if (this._parent)
+            return this._parent._getTopMenu();
+        else
+            return this;
+    },
+
     _sessionUpdated: function() {
         this._setSettingsVisibility(Main.sessionMode.allowSettings);
     },
@@ -903,6 +911,8 @@ const PopupMenuBase = new Lang.Class({
         else
             throw TypeError("Invalid argument to PopupMenuBase.addMenuItem()");
 
+        menuItem._parent = this;
+
         this.length++;
     },
 
@@ -1154,18 +1164,6 @@ const PopupSubMenu = new Lang.Class({
         this.actor.hide();
     },
 
-    _getTopMenu: function() {
-        let actor = this.actor.get_parent();
-        while (actor) {
-            if (actor._delegate && actor._delegate instanceof PopupMenu)
-                return actor._delegate;
-
-            actor = actor.get_parent();
-        }
-
-        return null;
-    },
-
     _needsScrollbar: function() {
         let topMenu = this._getTopMenu();
         let [topMinHeight, topNaturalHeight] = topMenu.actor.get_preferred_height(-1);